class utils {
	/**
	 *
	 * 时间戳转换日期
	 *
	 * @param {String} value 传入的时间戳
	 * @param {String} String 返回的时间
	 */
	formatDate(value) {
		let date = new Date(value)
		let y = date.getFullYear()
		let MM = date.getMonth() + 1
		MM = MM < 10 ? '0' + MM : MM
		let d = date.getDate()
		d = d < 10 ? '0' + d : d
		let h = date.getHours()
		h = h < 10 ? '0' + h : h
		let m = date.getMinutes()
		m = m < 10 ? '0' + m : m
		let s = date.getSeconds()
		s = s < 10 ? '0' + s : s
		return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s
	}

	/**
	 * 循环对象
	 *
	 * @param {Object|Array} obj 传入的值
	 * @param {Function} fn 为每个项调用的回调
	 */
	forEach(obj, fn) {
		if (obj === null || typeof obj === 'undefined') return

		// 如果还没有可写的东西，就强制一个数组
		if (typeof obj !== 'object') obj = [obj]

		if (this.isArray(obj)) {
			// 数组循环
			for (var i = 0, l = obj.length; i < l; i++) {
				fn.call(null, obj[i], i, obj)
			}
		} else {
			// 对象循环
			for (var key in obj) {
				/* 是否具有键 */
				if (Object.prototype.hasOwnProperty.call(obj, key)) {
					fn.call(null, obj[key], key, obj)
				}
			}
		}
	}

	/**
	 * 确定值是否为数组
	 *
	 * @param {Object} val 传入的值
	 * @returns {boolean} 如果值是数组，则为True，否则为false
	 */
	isArray(val) {
		return Object.prototype.toString.call(val) === '[object Array]'
	}

	/**
	 * 确定值是否为对象
	 *
	 * @param {Object} obj 传入的对象
	 * @returns {String} 返回类型
	 */
	getObjClass(obj) {
		return Object.prototype.toString.call(obj).slice(8, -1)
	}

	/**
	 * 深度克隆
	 *
	 * @param {Object} obj 传入需要克隆的对象
	 * @returns {Object} 返回克隆好的对象
	 */
	deepClone(obj) {
		let result
		let objClass = this.getObjClass(obj)

		if (objClass === 'Object') {
			result = {}
		} else if (objClass === 'Array') {
			result = []
		} else {
			return obj // 如果是其他数据类型不复制，直接将数据返回
		}

		// 遍历目标对象
		for (let key in obj) {
			let value = obj[key]
			result[key] = this.deepClone(value)
		}

		return result
	}


	/**
	 * 递归合并两个对象
	 *
	 * @param {*} target
	 * @param {*} sources
	 * @return {*}
	 * @memberof Common
	 */
	assiginObj(target, sources) {
		let obj = target
		if (typeof target != 'object' || typeof sources != 'object' || typeof target) {
			return sources // 如果其中一个不是对象 就返回sources
		}
		for (let key in sources) {
			if (target.hasOwnProperty(key)) {
				obj[key] = this.assiginObj(target[key], sources[key])
			} else {
				// 不存在就直接添加
				obj[key] = sources[key]
			}
		}
		return obj
	}

	/**
	 * @param {Object} optionArr
	 * @param {Object} key
	 */

	getOptionLabel(optionArr, key) {

		for (var i = 0, len = optionArr.length; i < len; i++) {
			if ("" + optionArr[i].value == "" + key) {
				return optionArr[i].label
			}
		}
		return "未选择"
	}

	convertCss(obj) {

		let result = {}
		// 遍历目标对象
		for (let key in obj) {
			if (obj[key] == null || (typeof obj[key] == 'object' && obj[key].value == null)) {
				continue
			}
			let value = obj[key]
			let newKey = key.replace("_", "-")
			if (typeof obj[key] == 'object') {
				result[newKey] = obj[key].value + obj[key].type
			} else {
				result[newKey] = obj[key]
			}

			}
		return result

	}
}

export default new utils()